//
//  FYStatusViewModel.swift
//  Weibo
//
//  Created by 冯毅 on 16/8/12.
//  Copyright © 2016年 冯毅. All rights reserved.
//

import UIKit

//  微博数据处理的ViewModel 对应的视图是首页自定义的cell(FYStatusTableViewCell)
class FYStatusViewModel: NSObject {
    
    //  提供微博数据模型
    var status: FYStatus?
    
    //  转发数内容
    var retweetCountContent: String?
    
    //  评论数内容
    var commentCountContent: String?
    
    //  赞数内容
    var unlikeCountContent: String?
    
    //  转发微博内容
    var retweetContent: String?
    
    //  来源数据
    var sourceContent: String?
    
    //  会员等级图片
    var mbrankImage: UIImage?
    
    //  认证类型等级图片
    var verifiedTypeImage: UIImage?
    /*
        判断时间是否是今年
            判断是否是今天
                判断是否是一分钟之前
                判断是否是一小时之前
                其他
            判断是否是昨天
                昨天 10:10
            其他
                08-12 08:12
        不是今年
            2013-1-23 20:23
     */
    
    var timeContent: String? {
        //  Sun Aug 14 12:00:03 +0800 2016
        //  判断发微博时间是否为nil
        guard let createDateStr = status?.created_at else {
            return nil
        }
        
        return NSDate.sinaDate(createDateStr).sinaDateString
//        //  代码执行到此,表示发微博时间不为nil,表示没有问题
//        let dt = NSDateFormatter()
//        //  指定格式化方式
//        dt.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//        //  指定本地化信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        //  通过格式化方式转化成时间对象
//        let createDate = dt.dateFromString(createDateStr)!
//        
//        if isThisYear(createDate) {
//            //  日历对象
//            let calendar = NSCalendar.currentCalendar()
//            
//            if calendar.isDateInToday(createDate) {
//                //  获取发微博时间距离当前时间差多少秒
//                let timeInterVal =  abs(createDate.timeIntervalSinceNow)
//                if timeInterVal < 60 {
//                    return "刚刚"
//                } else if timeInterVal < 3600 {
//                    let result = timeInterVal / 60
//                    return "\(Int(result))分钟前"
//                } else {
//                    let result = timeInterVal / 3600
//                    return "\(Int(result))小时前"
//                }
//                
//                
//            } else if calendar.isDateInYesterday(createDate){
//                dt.dateFormat = "昨天 HH:mm"
//            } else {
//                dt.dateFormat = "MM-dd HH:mm"
//            }
//            
//            
//        } else {
//            dt.dateFormat = "yyyy-MM-dd HH:mm"
//        }
//        
//        return dt.stringFromDate(createDate)
    }
    
//    private func isThisYear(createDate:NSDate) -> Bool {
//        
//        let dt = NSDateFormatter()
//        
//        //  指定格式化方式
//        dt.dateFormat = "yyyy"
//        
//        //  指定本地化信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        
//        let createDateYear = dt.stringFromDate(createDate)
//        
//        let currentDateYear = dt.stringFromDate(NSDate())
//        
//        return createDateYear == currentDateYear
//        
//    }
    
    //  通过重载构造函数初始化当前对象
    init(status: FYStatus) {
        
        super.init()
        self.status = status
        //  处理转发,评论,赞的逻辑处理
        retweetCountContent = handleCount(status.reposts_count, defaultTitle: "转发")
        
        commentCountContent = handleCount(status.comments_count, defaultTitle: "评论")
        
        unlikeCountContent = handleCount(status.attitudes_count, defaultTitle: "赞")
        //  处理转发微博
        handleRetweetContent(status)
        //  处理来源数据
        handleSource(status.source ?? "")
        //  处理会员等级图片
        handleMbrankImage(status.user?.mbrank ?? 0)
        //  处理认证类型等级图片
        handleVerifiedTypeImage(status.user?.verified_type ?? -1)
    
        timeContent
    }
    
    //  处理认证类型等级图片
    private func handleVerifiedTypeImage(verifiedType: Int) {
        
        switch verifiedType {
            
        case 0:
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2, 3, 5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
        }
        
    }
    
    //  处理会员等级图片
    private func handleMbrankImage(mbrank: Int) {
        if mbrank > 1 && mbrank <= 6 {
            //  合法的会员等级范围
            mbrankImage = UIImage(named: "common_icon_membership_level\(mbrank)")
        }
    }
    
    //  处理转发微博内容的拼接逻辑
    private func handleRetweetContent(status: FYStatus) {
        //判断是否有转发微博内容
        if status.retweeted_status != nil {
            
            //  取到转发的用户昵称
            guard let text = status.retweeted_status?.text, let name = status.retweeted_status?.user?.screen_name else {
                return
            }
            
            //  拼接转发微博内容
            let result = "@\(name):\(text)"
            
            retweetContent = result
        }
    }
    
    
    //  处理来源数据
    private func handleSource(source: String) {
        
        //  判断字符串中是否包含这样的关键字符串
        if source.containsString("\">") && source.containsString("</") {
            //  开始光标位置
            let startIndex = source.rangeOfString("\">")!.endIndex
            //  结束光标位置
            let endIndex = source.rangeOfString("</")!.startIndex
            //  获取指定范围的字符串
            let result = source.substringWithRange(startIndex..<endIndex)
            //  设置给来源数据
            sourceContent = "来自" + result
        }
        
    }
    
    
    //  处理转发,评论,赞的逻辑
    private func handleCount(count: Int, defaultTitle: String) -> String {
        /*
        判断传入的参数是否大于0
            判断是否大于等于10000
                显示1.x万,...
            不是大于等于10000
                显示当前数据
        不大于0    
            显示原始文本
        */
        
        if count > 0 {
            if count >= 10000 {
                let result = CGFloat(count / 1000) / 10
                
                var resultStr = "\(result)万"
                
                //判断字符串中是否包含0
                if resultStr.containsString(".0") {
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return resultStr
            } else {
                return "\(count)"
            }
        } else {
            return defaultTitle
        }
        
    }
}
